export default {
  namespaced: true,
  state: {
    // 包含6个属性：id, name, price, count, logo, state
    cart: JSON.parse(uni.getStorageSync('cart') || '[]')
  },
  mutations: {
    addToCart(state, goods) {
      const index = state.cart.findIndex((x) => x.id === goods.id);
      if(index === -1) {
        state.cart.push(goods);
      } else {
        state.cart[index].count++;
      }
      // 本地化存储
      uni.setStorageSync('cart', JSON.stringify(state.cart))
    },
    // 更新商品的状态
    updateGoodsState(state, obj) {
      const findRes = state.cart.find((x) => x.id === obj.id);
      if(findRes) {
        // 如果是改变状态
        if(typeof obj.state === 'boolean') {
          findRes.state = obj.state;
        }
        // 如果要改变数量
        if(obj.count) {
          findRes.count = obj.count;
        }
        // 更新本地存储中的数据
        uni.setStorageSync('cart', JSON.stringify(state.cart))
      }
    },
    // 删除商品
    removeGoods(state, id) {
      state.cart = state.cart.filter(x => x.id !== id);
      uni.setStorageSync('cart', JSON.stringify(state.cart));
    },
    // 更新所有商品的选中状态
    updateAllGoodsState(state, checkState) {
      state.cart = state.cart.map((item) => {
        return {
          ...item,
          state: checkState
        }
      });
      uni.setStorageSync('cart', JSON.stringify(state.cart));
    }
  },
  actions: {},
  getters: {
    // 购物车总数量
    total(state) {
      return state.cart.reduce((pre, cur, index, arr) => {
        return pre + cur.count
      }, 0)
    },
    // 已勾选商品的总数量
    checkoutCount(state) {
      const selectArr = state.cart.filter((item) => item.state);
      return selectArr.reduce((pre, cur, index, arr) => {
        return pre + cur.count
      }, 0)
    },
    // 判断是否所有的商品都是勾选状态
    isFullChecked(state) {
      return state.cart.every((item) => item.state);
    },
    // 已选商品的总价格
    checkedGoodsAmount(state) {
      const selectArr = state.cart.filter((item) => item.state);
      // debugger
      return selectArr.reduce((pre, cur, index, arr) => {
        return pre + cur.count * cur.price
      }, 0).toFixed(2);
    }
  },
}